package com.gosophia.taskManagement.action;

import java.util.ArrayList;
import java.util.Date;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.gosophia.commons.DateTranslate;
import com.gosophia.commons.OrderCondition;
import com.gosophia.commons.PropertyFilter;
import com.gosophia.commons.PropertyFilter.OperatorType;
import com.gosophia.commons.web.action.BaseAjaxAction;
import com.gosophia.holidayManagement.ws.HolidayManagementWebService;
import com.gosophia.taskManagement.dto.MissionDTO;
import com.gosophia.taskManagement.entity.Mission;
import com.gosophia.taskManagement.ws.TaskManagementWebService;

/**
 * 获取任务查询列表
 * @author mayue
 *
 */
@Controller("GetAllMissionListAction")
@Scope("prototype")
public class GetAllMissionListAction extends BaseAjaxAction<MissionDTO>{

    private static final long serialVersionUID = 1L;
    @Autowired
    private TaskManagementWebService taskManagementWebService;
    @Autowired
    private HolidayManagementWebService holidayManagementWebService;
    
    private String remind;
    private String warn;
    private String noState;
    
    @Override
    public String _execute() throws Exception {
        

        
        if(this.searchType==true){
            if("0".equals(remind) && "1".equals(warn) && noState==null){
                //提醒
                Date date = holidayManagementWebService.findTheAfterDay(new Date(), 2);
                PropertyFilter isNull = new PropertyFilter();
                isNull.setPropertyName("actualEndTime");
                isNull.setOperator(OperatorType.IS_NULL);
                PropertyFilter scheduleGE = new PropertyFilter("scheduleEndDate",OperatorType.GE,new Date());
                PropertyFilter scheduleLE = new PropertyFilter("scheduleEndDate",OperatorType.LE,date);
                isNull.and(scheduleGE.and(scheduleLE));
                //预警
                PropertyFilter p  = new PropertyFilter("actualEndTime",OperatorType.GT,"${scheduleEndDate}");
                p.setToCharFormat("yyyy-MM-dd");
                PropertyFilter isNotNull = new PropertyFilter();
                isNotNull.setPropertyName("actualEndTime");
                isNotNull.setOperator(OperatorType.IS_NOT_NULL);
                p.and(isNotNull);
                PropertyFilter isNull2 = new PropertyFilter();
                isNull2.setPropertyName("actualEndTime");
                isNull2.setOperator(OperatorType.IS_NULL);
                p.or(isNull2.and(new PropertyFilter("scheduleEndDate",OperatorType.LT,new Date())));
                //或
                isNull.or(p);
                propertyFilters.add(isNull);
            }
            if("0".equals(remind) && warn==null && noState==null){
                Date date = holidayManagementWebService.findTheAfterDay(new Date(), 2);
                PropertyFilter isNull = new PropertyFilter();
                isNull.setPropertyName("actualEndTime");
                isNull.setOperator(OperatorType.IS_NULL);
                PropertyFilter scheduleGE = new PropertyFilter("scheduleEndDate",OperatorType.GE,new Date());
                PropertyFilter scheduleLE = new PropertyFilter("scheduleEndDate",OperatorType.LE,date);
                isNull.and(scheduleGE.and(scheduleLE));
                propertyFilters.add(isNull);
            }
            if("1".equals(warn) && remind==null && noState==null){
                PropertyFilter p  = new PropertyFilter("actualEndTime",OperatorType.GT,"${scheduleEndDate}");
                p.setToCharFormat("yyyy-MM-dd");
                PropertyFilter isNotNull = new PropertyFilter();
                isNotNull.setPropertyName("actualEndTime");
                isNotNull.setOperator(OperatorType.IS_NOT_NULL);
                p.and(isNotNull);
                PropertyFilter isNull2 = new PropertyFilter();
                isNull2.setPropertyName("actualEndTime");
                isNull2.setOperator(OperatorType.IS_NULL);
                isNull2.and(new PropertyFilter("scheduleEndDate",OperatorType.LT,new Date()));
                p.or(isNull2);
                propertyFilters.add(p);
            }
            page = taskManagementWebService.findAllMissionByPage(page.getPageSize(),page.getPageNo(), propertyFilters, orderConditions);
        }else if(this.searchType==false){
            if(searchString!=null && !"".equals(searchString)){
                searchString = searchString.trim();
            }
            page = taskManagementWebService.findAllMissionByPage(searchString, page.getPageSize(),page.getPageNo(), orderConditions,null);

        }
        
        if(page.getResult().size()==0){
            super.getRequestResult().setRsltCode("1");
        }else{
            super.getRequestResult().setRsltCode("0");
        }
        return SUCCESS;
    }
    
    @Override
    public MissionDTO getDetailData() {
        // TODO Auto-generated method stub
        return null;
    }

    public String getRemind() {
        return remind;
    }

    public void setRemind(String remind) {
        this.remind = remind;
    }

    public String getWarn() {
        return warn;
    }

    public void setWarn(String warn) {
        this.warn = warn;
    }

    public String getNoState() {
        return noState;
    }

    public void setNoState(String noState) {
        this.noState = noState;
    }

}
